/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package transervfx.Logica;


import java.util.List;
import transervfx.Dato.DAO.ClienteDAO;
import transervfx.Dato.DAO.ClienteFisicoDAO;
import transervfx.Dato.DAO.RepartidorDAO;
import transervfx.Dato.Entidad.Cliente;
import transervfx.Dato.Entidad.Fisico;
import transervfx.Dato.Entidad.Repartidor;

/**
 *
 * @author silvi
 */
public class GestorClienteFisico {

    private static GestorClienteFisico INSTANCE = null;

    private GestorClienteFisico() {
    }

    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new GestorClienteFisico();
        }
    }

    public static GestorClienteFisico getInstance() {
        if (INSTANCE == null) {
            createInstance();
        }
        return (GestorClienteFisico) INSTANCE;
    }

    public void guardarCliente(Fisico c) {
        ClienteFisicoDAO.getInstance().persist(c);
    }

    public void actualizarCliente(Fisico c) {
        ClienteFisicoDAO.getInstance().update(c);
    }

    public void eliminarCliente(Fisico c) throws Exception {

        /*System.out.println("POSEE DEUDA: " + ClienteFisicoDAO.getInstance().poseeDeuda(c));
        if (ClienteFisicoDAO.getInstance().poseeDeuda(c)) {
            throw new Exception("El cliente posee una deuda asociada, no puede ser eliminado");
        }*/

        ClienteFisicoDAO.getInstance().remove(c);
    }

    public List<Fisico> findAll() {
        return ClienteFisicoDAO.getInstance().findAll();
    }

    public Fisico findByCompleto(Fisico clienteFisicoSeleccionado) {
        return ClienteFisicoDAO.getInstance().findByCompleto(clienteFisicoSeleccionado);
    }

    public boolean existeClienteFisico(String tipoDoc, Integer nroDoc) {
        Fisico r = ClienteFisicoDAO.getInstance().findByTipoDocAndNroDoc(tipoDoc, nroDoc);
        if (r == null) {
            return false;
        } else {
            return true;
        }
    }

    public List<Fisico> buscarPorFiltro(String apellido, String nombres, String tipoDocumento, Integer numeroDocumento, Integer cuit, String condicionIva, int page, int itemPorPagina) {
        return ClienteFisicoDAO.getInstance().buscarPorFiltroRango(apellido, nombres, tipoDocumento, numeroDocumento, cuit, condicionIva, page, itemPorPagina);
    }

    public Long numeroDeClientesFisicosFiltrados(String apellido, String nombres, String tipoDocumento, Integer numeroDocumento, Integer cuit, String condicionIva) {
        return ClienteFisicoDAO.getInstance().numeroDeClientesFisicosFiltrados(apellido, nombres, tipoDocumento, numeroDocumento, cuit, condicionIva);
    }

    /*public Long numeroDeClientesFisicosFiltrados(String text, String text0, String condIva) {
        throw new UnsupportedOperationException("Not yet implemented");
    }*/
}
